package com.by.lazy;

/**
 * @version 1.0
 * @Author 彭彦彬
 * @Date 2025/4/9 14:36
 * @注释
 */

/**
 * 懒汉式在第一次调用 getInstance() 方法时才创建实例，避免了资源浪费，
 * 同时通过双重检查锁定（Double-Checked Locking）确保线程安全。
 */
public class Singleton {
    // 1. 私有化构造方法
    private Singleton() {}

    // 2. 使用 volatile 关键字防止指令重排序
    private static volatile Singleton instance;

    // 3. 提供全局访问点，使用双重检查锁定
    public static Singleton getInstance() {
        if (instance == null) { // 第一次检查
            synchronized (Singleton.class) {
                if (instance == null) { // 第二次检查
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
